// 插件接口定义
package interfaces

import (
	"context"
	"errors"
)

// 插件元数据
type Metadata struct {
	Name        string // 插件名称
	Version     string // 版本号
	Author      string // 作者
	Description string // 描述
	ID          string // 唯一标识符
}

// 插件接口，所有插件必须实现此接口
type Plugin interface {
	// 获取插件元数据
	Metadata() Metadata

	// 初始化插件
	Init(config map[string]any) error

	// 启动插件
	Start(ctx context.Context) error

	// 停止插件
	Stop() error

	// 处理请求
	HandleRequest(req Request) (Response, error)

	// 设置主程序回调接口
	SetHost(host HostInterface)
}

// 请求结构
type Request struct {
	Action string // 动作名称
	Data   any    // 数据
}

// 响应结构
type Response struct {
	Success bool   // 是否成功
	Data    any    // 响应数据
	Error   string // 错误信息
}

// 主程序接口，插件通过此接口与主程序交互
type HostInterface interface {
	// 日志记录
	Log(level string, message string)

	// 获取主程序配置
	GetConfig(key string) (any, bool)

	// 调用其他插件
	CallPlugin(pluginID string, req Request) (Response, error)
}

// 插件注册函数类型定义
type PluginRegisterFunc func() (Plugin, error)

// 错误定义
var (
	ErrPluginNotFound      = errors.New("plugin not found")
	ErrPluginInitFail      = errors.New("plugin initialization failed")
	ErrInvalidPlugin       = errors.New("invalid plugin interface")
	ErrPluginAlreadyLoaded = errors.New("plugin already loaded")
)
